<?php
//   +----------------------------------------------------------------------
//   | Copyright (c) 2015-2025 http://www.hdphp.cn All rights reserved.
//   | Licensed ( http://www.hdphp.cn/licenses/ )
//   | Author: Jack <sophia2152@qq.com>
//   | 官方网址: http://www.hdphp.cn
//   | 这不是一个自由软件！您只能在不用于商业目的的前提下对程序代码进行修改和使用。
//   | 任何企业和个人不允许对程序代码以任何形式任何目的再发布。
//   +----------------------------------------------------------------------
namespace app\services\system\log;

use app\services\BaseServices;
use app\dao\system\log\SystemLogDao;
use app\services\system\admin\SystemAdminServices;
use app\services\system\SystemMenusServices;

/**
 * Class：SystemLogServices
 * 创建人：Jack
 * 创建时间：2023/7/28 17:41
 * @package app\services\system\log
 * @mixin SystemLogDao
 */
class SystemLogServices extends BaseServices
{

    /**
     * SystemLogServices constructor.
     * @param SystemLogDao $dao
     */
    public function __construct(SystemLogDao $dao)
    {
        $this->dao = $dao;
    }

    /**
     * 注释：获取系统日志列表
     * 创建人：Jack
     * 创建时间：2023/7/30 15:20
     * @param array $where
     * @param int   $level
     * @return array
     */
    public function getLogList(array $where, int $level)
    {
        [$page, $limit] = $this->getPageValue();
        if (!$where['admin_id']) {
            /** @var SystemAdminServices $service */
            $service = app()->make(SystemAdminServices::class);
            $where['admin_id'] = $service->getAdminIds($level);
        }
        $list = $this->dao->getLogList($where, $page, $limit);
        foreach ($list as &$item) {
            $item['ip_data'] = $this->convertIp($item['ip']);
            $item['add_time'] = date('Y-m-d H:i:s', $item['add_time']);
        }
        $count = $this->dao->count($where);

        return compact('list', 'count');
    }

    /**
     * 注释：记录系统访问日志
     * 创建人：Jack
     * 创建时间：2023/7/30 15:30
     * @param int    $adminId   管理员id
     * @param string $username  管理员账号
     * @param string $true_name 管理员姓名
     * @param string $module    访问模块
     * @param string $rule      访问
     * @param string $ip        访问ip
     * @param string $type      访问类型
     * @return bool
     */
    public function recordAdminLog(int $adminId, string $username, string $true_name, string $module, string $rule, string $ip, string $type)
    {
        /** @var SystemMenusServices $service */
        $service = app()->make(SystemMenusServices::class);
        $data = [
            'admin_id' => $adminId,
            'method' => $module,
            'add_time' => time(),
            'username' => $username,
            'true_name' => $true_name,
            'path' => $rule,
            'page' => $service->getVisitName($rule) ?: '未知',
            'ip' => $ip,
            'type' => $type
        ];
        if ($this->dao->save($data)) {
            return true;
        } else {
            return false;
        }
    }
}
